import type { PageParam, PageResult } from '@vben/request';
import type { Dayjs } from 'dayjs';

import { requestClient } from '#/api/request';

export namespace ConsumptionBillApi {
  /** SPA消费明细信息 */
  export interface ConsumptionDetail {
            id: number; // 明细ID
            billId?: number; // 关联账单ID
            itemType?: string; // 消费类型（服务/商品/套餐/房间/其他）
            itemId?: number; // 对应项目ID（指向服务表、商品表、房型表等）
            itemName?: string; // 消费项目名称
            quantity?: number; // 数量
            unitPrice?: number; // 单价
            discountAmount?: number; // 优惠金额
            subtotalAmount?: number; // 小计金额（含折扣后）
            staffId: number; // 服务员工/技师ID（可空）
            staffCommission: number; // 员工提成金额（可空）
            resourceUsageId: number; // 资源使用ID（房间/手牌/座位等绑定资源）
            startTime: string | Dayjs; // 服务开始时间
            endTime: string | Dayjs; // 服务结束时间
            durationMinutes: number; // 服务时长（分钟）
            status: string; // 消费状态
            remark: string; // 备注
            groupId?: number; // 所属集团ID
            storeId?: number; // 所属门店ID
            registryId: number; // 来源的流水ID
  }

  /** SPA消费账单信息 */
  export interface ConsumptionBill {
    id: number; // 账单ID
    customerId?: number; // 顾客ID（统一客户体系）
    teamId: number; // 团队ID（可空）
    resourceUsageId: number; // 资源使用ID（手牌/房卡/工牌等泛化）
    billNumber?: string; // 账单编号
    totalAmount?: number; // 原始总金额
    discountAmount?: number; // 总优惠金额
    payableAmount?: number; // 应付金额
    paidAmount?: number; // 已支付金额
    status: string; // 账单状态
    pointsUsed: number; // 使用积分
    pointsEarned: number; // 获得积分
    startTime: string | Dayjs; // 消费开始时间
    endTime: string | Dayjs; // 消费结束时间
    durationMinutes: number; // 消费时长（分钟）
    remark: string; // 备注
    groupId?: number; // 所属集团ID
    storeId?: number; // 所属门店ID
  }
}

/** 查询SPA消费账单分页 */
export function getConsumptionBillPage(params: PageParam) {
  return requestClient.get<PageResult<ConsumptionBillApi.ConsumptionBill>>('/spa/consumption-bill/page', { params });
}

/** 查询SPA消费账单详情 */
export function getConsumptionBill(id: number) {
  return requestClient.get<ConsumptionBillApi.ConsumptionBill>(`/spa/consumption-bill/get?id=${id}`);
}

/** 新增SPA消费账单 */
export function createConsumptionBill(data: ConsumptionBillApi.ConsumptionBill) {
  return requestClient.post('/spa/consumption-bill/create', data);
}

/** 修改SPA消费账单 */
export function updateConsumptionBill(data: ConsumptionBillApi.ConsumptionBill) {
  return requestClient.put('/spa/consumption-bill/update', data);
}

/** 删除SPA消费账单 */
export function deleteConsumptionBill(id: number) {
  return requestClient.delete(`/spa/consumption-bill/delete?id=${id}`);
}


/** 导出SPA消费账单 */
export function exportConsumptionBill(params: any) {
  return requestClient.download('/spa/consumption-bill/export-excel', { params });
}


// ==================== 子表（SPA消费明细） ====================

/** 获得SPA消费明细分页 */
export function getConsumptionDetailPage(params: PageParam) {
  return requestClient.get<PageResult<ConsumptionBillApi.ConsumptionDetail>>(`/spa/consumption-bill/consumption-detail/page`, { params });
}
/** 新增SPA消费明细 */
export function createConsumptionDetail(data: ConsumptionBillApi.ConsumptionDetail) {
  return requestClient.post(`/spa/consumption-bill/consumption-detail/create`, data);
}

/** 修改SPA消费明细 */
export function updateConsumptionDetail(data: ConsumptionBillApi.ConsumptionDetail) {
  return requestClient.put(`/spa/consumption-bill/consumption-detail/update`, data);
}

/** 删除SPA消费明细 */
export function deleteConsumptionDetail(id: number) {
  return requestClient.delete(`/spa/consumption-bill/consumption-detail/delete?id=${id}`);
}


/** 获得SPA消费明细 */
export function getConsumptionDetail(id: number) {
  return requestClient.get<ConsumptionBillApi.ConsumptionDetail>(`/spa/consumption-bill/consumption-detail/get?id=${id}`);
}
